{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "\n",
    "from PIL import Image\n",
    "from IPython.display import display\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from tensorflow import keras\n",
    "import tensorflow_datasets as tfds\n",
    "from keras.datasets import fashion_mnist\n",
    "\n",
    "tfds.disable_progress_bar()\n",
    "\n",
    "from tensorflow.keras.models import Model\n",
    "from tensorflow.keras.losses import Loss\n",
    "from tensorflow.keras.layers import Layer,Lambda,InputLayer\n",
    "from tensorflow.keras.utils import plot_model\n",
    "from tensorflow.keras.callbacks import ModelCheckpoint\n",
    "\n",
    "import cvnn.layers as complex_layers\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pip uninstall tensorflow\n",
    "# pip install tensorflow==2.9.0 cvnn tensorflow_datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "size = 56\n",
    "BUFFER_SIZE = 50\n",
    "BATCH_SIZE_PER_REPLICA = 8\n",
    "BATCH_SIZE = BATCH_SIZE_PER_REPLICA * 1\n",
    "\n",
    "# Define the traning parameters\n",
    "keep_training = False\n",
    "learning_rate = 0.01\n",
    "epochs = 4\n",
    "\n",
    "# load the dataset\n",
    "datasets, info = tfds.load(name='fashion_mnist', with_info=True, as_supervised=True, data_dir='./data')\n",
    "\n",
    "fashion_mnist_train, fashion_mnist_test = datasets['train'], datasets['test']\n",
    "\n",
    "num_train = info.splits['train'].num_examples\n",
    "num_test = info.splits['test'].num_examples"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.Define phase object ( Preprocess the images with up-sampling )\n",
    "1. Load image that serves as phase object  \n",
    "\n",
    "2. Image is 28x28 pixels, and is padded to 200x200 pixels  with 0's  \n",
    "\n",
    "3. Phase Image = exp(2$\\pi$ i * Padded Image)\n",
    "\n",
    "The digital image is encoded in phasor form, with an uniform amplitude and different phase angle.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def preprocess(image, label):\n",
    "    label = tf.one_hot(tf.cast(label, tf.int32), 10)   # convert the label to categorial, or one-hot coded\n",
    "    \n",
    "    up_sampling_size = int(1*size)\n",
    "    padding_size = (size - up_sampling_size)//2\n",
    "    image = tf.cast(image, tf.float32)\n",
    "    # Step1: upsample the image to 120x120\n",
    "    up_sampling_image = tf.image.resize(image,\n",
    "                                        size=[up_sampling_size,up_sampling_size],\n",
    "                                        method='nearest')\n",
    "    up_sampling_image = up_sampling_image / 255.0\n",
    "    # Step2: get the phase object\n",
    "    phase_image = tf.math.exp(2*np.pi*1j*tf.cast(up_sampling_image,dtype=tf.complex64))\n",
    "    # Step3: pad the phase object to 200x200 with 0s\n",
    "    zero_padded_image = tf.pad(phase_image,\n",
    "                                paddings=[[padding_size,padding_size],[padding_size,padding_size],[0,0]],\n",
    "                                mode=\"CONSTANT\",constant_values=0)\n",
    "        \n",
    "    return tf.cast(zero_padded_image, dtype=tf.complex64), label\n",
    "    \n",
    "train_dataset = fashion_mnist_train.map(preprocess).cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE)\n",
    "test_dataset = fashion_mnist_test.map(preprocess).batch(BATCH_SIZE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualize the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2022-08-19 00:51:33.254693: W tensorflow/core/kernels/data/cache_dataset_ops.cc:856] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1512x576 with 8 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the phase(angle) of the phase images\n",
    "rows, cols = 1 ,8\n",
    "fig = plt.figure(figsize=(21,8))\n",
    "for images, labels in test_dataset.take(1):\n",
    "    for i in range(8):\n",
    "        fig.add_subplot(rows,cols,i+1)\n",
    "        image = np.angle(images[i].numpy()).squeeze()\n",
    "        # print(np.min(np.abs(images[i].numpy()).squeeze())) # check the amplitude of the phase object\n",
    "        plt.imshow(image,cmap='RdBu')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.Build the Diffraction layer using Angular Spectrum method\n",
    "\n",
    "### Angular Spectrum Propagation\n",
    "$$U_1(x,y) =\\mathcal{F}^{-1}[\\mathcal{F} U_0(x,y)\\mathcal{F}h(x,y)]$$\n",
    "\n",
    "$$U_1(x,y) =\\mathcal{F}^{-1}[\\mathcal{F} U_0(x,y) H(f_x,f_y)]$$\n",
    "\n",
    "\n",
    "This can be described using Fourier transforms.The first Fourier transform decomposes the initial field into plane waves. To propagate the plane waves, we multiply each wave by a complex phase factor, and then we take the inverse Fourier transform to add all the propagated plane waves back together.\n",
    "\n",
    "To implement Angular spectrum propagation, the Fouier transform of the initial field is first multiplied with the phase factor $$H=e^{ik_zz}$$, where $k_z$is a function of the spatial frequencies $$k_z=\\sqrt{k^2-k_x^2-k_y}$$where $$  k = \\frac{2\\pi}{\\lambda}$$ and $k_x$ and $k_y$ are related to the spatial frequencies $f_x$ and $f_y$ by a factor of $2\\pi$ $$k_{x,y} = 2\\pi f_{x,y}$$\n",
    "\n",
    "Hence the complex exponential can be written in terms of the Fourier coordinates $f_x$ and $f_y$, that is \n",
    "\n",
    "$$H=e^{ik_zz},k_z = 2\\pi \\sqrt{\\frac{1}{\\lambda}-f_x-f_y}$$\n",
    "\n",
    "Descretized spatial freqnency $f_x = k*\\Delta f = \\frac{k}{N \\Delta x}$  \n",
    "Interval between the spatial frequencies $\\Delta f = \\frac{1}{N \\Delta x}=\\frac{1}{L}$,where $L$ denotes the field of view in object space"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Diffraction_Layer(Layer):\n",
    "    def __init__(self, units =200):\n",
    "        '''Initialize the diffraction layer attributes'''\n",
    "        super(Diffraction_Layer, self).__init__()\n",
    "        self.units = units\n",
    "        self.Nx = units              # Nx is the dimension of the grid\n",
    "        # self.L = 0.08              # source and observation plane side length, field of view\n",
    "        self.dx = 100e-6\n",
    "        self.lam = 0.75e-3           # wavelength of the optical wave: 0.75 mm\n",
    "        self.z = 3e-2                # distance of propagation(the distance bewteen two layers)\n",
    "   \n",
    "    def build(self, input_shape):\n",
    "        '''Create the state of the layer (weights)'''\n",
    "        phase_init = tf.random_normal_initializer()\n",
    "        self.phase = tf.Variable(name= \"phase\",\n",
    "                                initial_value=phase_init(shape=(self.units,self.units), dtype='float32'),\n",
    "                                trainable=True,\n",
    "                                constraint=lambda t: tf.clip_by_value(t, 0, 2*np.pi))\n",
    "        # To help with the 3D-printing and fabrication of the D2NN design, \n",
    "        # a sigmoid function was used to constrain the phase value of each neuron\n",
    "    @tf.function\n",
    "    def call(self, inputs):\n",
    "        '''Define the computation'''\n",
    "        def angular_spectrum_propagator(E, z = self.z, lam = self.lam):\n",
    "            # compute angular spectrum\n",
    "            fft_c = tf.signal.fft2d(E)\n",
    "            c = tf.signal.fftshift(fft_c)\n",
    "\n",
    "            fx = np.fft.fftshift(np.fft.fftfreq(self.Nx, d = self.dx))\n",
    "            fxx, fyy = np.meshgrid(fx, fx)\n",
    "            argument = (2 * np.pi)**2 * ((1. / lam) ** 2 - fxx ** 2 - fyy ** 2)\n",
    "\n",
    "           #Calculate the propagating and the evanescent (complex) modes\n",
    "            tmp = np.sqrt(np.abs(argument))\n",
    "            kz = np.where(argument >= 0, tmp, 1j*tmp)\n",
    "\n",
    "            # propagate the angular spectrum a distance z\n",
    "            E = tf.signal.ifft2d(tf.signal.ifftshift(c * np.exp(1j * kz * z)))\n",
    "            return E\n",
    "        return tf.multiply(angular_spectrum_propagator(inputs),tf.math.exp(1j*tf.cast(self.phase,dtype=tf.complex64)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": []
   },
   "source": [
    "#### Notice\n",
    "For ___tf.cast()___: In case of casting from real types to complex types(complex64), the imaginary part of the returned value is set to 0.    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Propogation(Layer):\n",
    "    def __init__(self, units =200):\n",
    "        '''Initialize the diffraction layer attributes'''\n",
    "        super(Propogation, self).__init__()\n",
    "        self.units = units\n",
    "        self.Nx = units              # Nx is the dimension of the grid\n",
    "        self.dx = 100e-6\n",
    "        self.lam = 0.75e-3           # wavelength of the optical wave\n",
    "        self.z = 1e-2                # distance of propagation(the distance bewteen last layer and the detector)\n",
    "        \n",
    "    @tf.function\n",
    "    def call(self, inputs):\n",
    "        '''Define the computation'''\n",
    "        def angular_spectrum_propagator(E, z = self.z, lam = self.lam):\n",
    "            # compute angular spectrum\n",
    "            fft_c = tf.signal.fft2d(E)\n",
    "            c = tf.signal.fftshift(fft_c)\n",
    "\n",
    "            fx = np.fft.fftshift(np.fft.fftfreq(self.Nx, d = self.dx))\n",
    "            fxx, fyy = np.meshgrid(fx, fx)\n",
    "            argument = (2 * np.pi)**2 * ((1. / lam) ** 2 - fxx ** 2 - fyy ** 2)\n",
    "\n",
    "           #Calculate the propagating and the evanescent (complex) modes\n",
    "            tmp = np.sqrt(np.abs(argument))\n",
    "            kz = np.where(argument >= 0, tmp, 1j*tmp)\n",
    "\n",
    "            # propagate the angular spectrum a distance z\n",
    "            E = tf.signal.ifft2d(tf.signal.ifftshift(c * np.exp(1j * kz * z))) # phase是加还是减\n",
    "            return E\n",
    "        return angular_spectrum_propagator(inputs)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Detector(Layer):\n",
    "    def __init__(self, units=200):\n",
    "        '''Initialize the instance attributes'''\n",
    "        super(Detector, self).__init__()\n",
    "        self.units = units\n",
    "    \n",
    "    @tf.function\n",
    "    def call(self, inputs):\n",
    "        ''' Converts output to one hot form\n",
    "        Applies softmax'''\n",
    "        \n",
    "        def rang(arr,shape,size=size,base = 500):\n",
    "            x0 = shape[0] * size // base\n",
    "            y0 = shape[2] * size // base\n",
    "            delta = (shape[1]-shape[0])* size // base\n",
    "            return arr[x0:x0+delta,y0:y0+delta]\n",
    "        \n",
    "        def reduce_mean(tf_):\n",
    "            return tf.reduce_mean(tf_)\n",
    "        \n",
    "        def _ten_regions(a):\n",
    "            return tf.map_fn(reduce_mean,tf.convert_to_tensor([\n",
    "                rang(a,(120,170,120,170)),\n",
    "                rang(a,(120,170,240,290)),\n",
    "                rang(a,(120,170,360,410)),\n",
    "                rang(a,(220,270,120,170)),\n",
    "                rang(a,(220,270,200,250)),\n",
    "                rang(a,(220,270,280,330)),\n",
    "                rang(a,(220,270,360,410)),\n",
    "                rang(a,(320,370,120,170)),\n",
    "                rang(a,(320,370,240,290)),\n",
    "                rang(a,(320,370,360,410))\n",
    "            ]))\n",
    "        \n",
    "        def ten_regions(logits):\n",
    "            return tf.map_fn(_ten_regions,tf.abs(logits),dtype=tf.float32)\n",
    "\n",
    "        return tf.square(ten_regions(tf.abs(inputs))) # logits_abs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def loss_function(y_label,logits_abs):\n",
    "    return tf.reduce_mean(tf.square(logits_abs-y_label))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /environment/miniconda3/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py:629: calling map_fn_v2 (from tensorflow.python.ops.map_fn) with dtype is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use fn_output_signature instead\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /environment/miniconda3/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py:629: calling map_fn_v2 (from tensorflow.python.ops.map_fn) with dtype is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use fn_output_signature instead\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " input_1 (ComplexInput)      [(None, 56, 56)]          0         \n",
      "                                                                 \n",
      " diffraction__layer (Diffrac  (None, 56, 56)           3136      \n",
      " tion_Layer)                                                     \n",
      "                                                                 \n",
      " diffraction__layer_1 (Diffr  (None, 56, 56)           3136      \n",
      " action_Layer)                                                   \n",
      "                                                                 \n",
      " propogation (Propogation)   (None, 56, 56)            0         \n",
      "                                                                 \n",
      " detector (Detector)         (None, 10)                0         \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 6,272\n",
      "Trainable params: 6,272\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "def get_D2NN_model():\n",
    "    inputs = complex_layers.complex_input(shape=(size,size))\n",
    "    h1 = Diffraction_Layer(size)(inputs)\n",
    "    h2 = Diffraction_Layer(size)(h1)\n",
    "    propogation = Propogation(size)(h2)\n",
    "    out = Detector()(propogation)\n",
    "    return tf.keras.Model(inputs, out)\n",
    "\n",
    "D2NN = get_D2NN_model()\n",
    "\n",
    "D2NN.summary()\n",
    "# plot_model(D2NN, show_shapes=True, show_layer_names=True, to_file='D2NN-model.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/4\n",
      "7500/7500 [==============================] - 464s 61ms/step - loss: 0.0685 - accuracy: 0.6213 - val_loss: 0.0479 - val_accuracy: 0.7290\n",
      "Epoch 2/4\n",
      "7500/7500 [==============================] - 425s 57ms/step - loss: 0.0456 - accuracy: 0.7502 - val_loss: 0.0453 - val_accuracy: 0.7381\n",
      "Epoch 3/4\n",
      "7500/7500 [==============================] - 434s 58ms/step - loss: 0.0439 - accuracy: 0.7616 - val_loss: 0.0440 - val_accuracy: 0.7569\n",
      "Epoch 4/4\n",
      "7500/7500 [==============================] - 429s 57ms/step - loss: 0.0433 - accuracy: 0.7666 - val_loss: 0.0436 - val_accuracy: 0.7615\n"
     ]
    }
   ],
   "source": [
    "if keep_training:\n",
    "    D2NN.load_weights('./training_results/D2NN_phase_only')\n",
    "\n",
    "lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n",
    "    initial_learning_rate = learning_rate,\n",
    "    decay_steps=100000,\n",
    "    decay_rate=0.96,\n",
    "    staircase=True)\n",
    "\n",
    "D2NN.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=lr_schedule),\n",
    "             loss=loss_function,\n",
    "             metrics=['accuracy'])\n",
    "\n",
    "checkpoint_path = './training_results/D2NN_phase_only'\n",
    "checkpoint = ModelCheckpoint(filepath=checkpoint_path,\n",
    "                             save_weights_only=True,\n",
    "                             sace_freq='epoch')\n",
    "\n",
    "history = D2NN.fit(train_dataset,\n",
    "                   epochs=epochs,\n",
    "                   validation_data=test_dataset,\n",
    "                   callbacks=[checkpoint])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Extracting weights from model\n",
    "- Neurons’ phase values were converted into a relative height map (Δ𝑧=𝜆$\\phi$/2𝜋Δ𝑛)    \n",
    "  ,where Δ𝑛 is the refractive index difference between the 3D printing material (VeroBlackPlus RGD875) and air\n",
    "- save the height map to a numpy file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The max value in wights is: 6.281964\n",
      "The mim value in wights is: 0.0\n"
     ]
    }
   ],
   "source": [
    "D2NN.load_weights('./training_results/D2NN_phase_only')\n",
    "# print(D2NN.layers)\n",
    "# print(D2NN.layers[1].weights)\n",
    "# print(D2NN.layers[5].get_weights()) # get the numpy arrays for the parameters of the layer\n",
    "# print(D2NN.get_layer('diffraction__layer_4').phase)\n",
    "\n",
    "# Extract all the weights from the model\n",
    "weights = []\n",
    "# D2NN 中的 diffraction layer 从第二层开始，第一层是 input layer\n",
    "for l in range(1,2+1):\n",
    "    weights.append(np.squeeze(D2NN.layers[l].get_weights())) \n",
    "    \n",
    "# Map the weights into range [0, 2*pi]\n",
    "for l in range(0,2):\n",
    "    for i in range(0,size):\n",
    "        for j in range(0,size):\n",
    "            while (weights[l][i][j] < 0):\n",
    "                    weights[l][i][j] += 2*np.pi\n",
    "            while(weights[l][i][j] > 2*np.pi):\n",
    "                weights[l][i][j] -= 2*np.pi\n",
    "print(\"The max value in wights is: \" + str(np.max(weights)))\n",
    "print(\"The mim value in wights is: \" + str(np.min(weights)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The shape of the height map for all layers: (2, 56, 56)\n",
      "Max and min value in height_map are: 0.0010380042, 0.0\n",
      "\n",
      "height_map.npy has saved successfully\n"
     ]
    }
   ],
   "source": [
    "# Convert the weights to height map\n",
    "lam = 0.75e-3\n",
    "\n",
    "# VeroBlackPlus RGD875, refractive index: 1.7227\n",
    "# SiO2 (Glass) - Palik, Refractive Index: 1.47012\n",
    "material_refractive_index = 1.7227\n",
    "air_refractive_index = 1.0003\n",
    "\n",
    "delta_n = material_refractive_index - air_refractive_index\n",
    "\n",
    "height_map = (lam*np.array(weights)) / (2*np.pi*delta_n)         \n",
    "\n",
    "# Check the shape and save it to np file\n",
    "print(\"The shape of the height map for all layers:\",end=' ')\n",
    "print(np.shape(np.array(height_map)))\n",
    "print(\"Max and min value in height_map are: \" + str(np.max(height_map)) + \", \"+ str(np.min(height_map))+\"\\n\")\n",
    "\n",
    "np.save('height_map.npy',np.array(height_map))\n",
    "print(\"height_map.npy has saved successfully\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The shape of the filter height map for all layers: (56, 56)\n",
      "Max and min value in height_map are: 0.0010341346, 0.0\n",
      "\n",
      "filter_height_map.npy has saved successfully\n"
     ]
    }
   ],
   "source": [
    "# get the height map for the filter\n",
    "test_dataset = fashion_mnist_test.map(preprocess).batch(BATCH_SIZE)\n",
    "for images, labels in test_dataset.take(1):\n",
    "    images = tfds.as_numpy(images)\n",
    "    for _ in range(1):\n",
    "        image_phase = np.angle(images[3]).squeeze()\n",
    "        for i in range(0,size):\n",
    "            for j in range(0,size):\n",
    "                while (image_phase[i][j] < 0):\n",
    "                    image_phase[i][j] += 2*np.pi\n",
    "                while(image_phase[i][j] > 2*np.pi):\n",
    "                    image_phase[i][j] -= 2*np.pi\n",
    "        # print(np.shape(image_phase))\n",
    "        \n",
    "        filter_height_map = (lam*np.array(image_phase)) / (2*np.pi*delta_n)\n",
    "        np.save('filter_height_map.npy',np.array(filter_height_map))\n",
    "        print(\"The shape of the filter height map for all layers:\",end=' ')\n",
    "        print(np.shape(np.array(filter_height_map)))\n",
    "        print(\"Max and min value in height_map are: \" + str(np.max(filter_height_map)) + \", \"+ str(np.min(filter_height_map))+\"\\n\")\n",
    "        print(\"filter_height_map.npy has saved successfully\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.Evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x221c074da48>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\"\"\"Plot the region of the ten detectors\"\"\"\n",
    "detector_plane = np.zeros([size,size])\n",
    "\n",
    "ten_detector_regions = [[120,170,120,170],\n",
    "                        [120,170,240,290],\n",
    "                        [120,170,360,410],\n",
    "                        [220,270,120,170],\n",
    "                        [220,270,200,250],\n",
    "                        [220,270,280,330],\n",
    "                        [220,270,360,410],\n",
    "                        [320,370,120,170],\n",
    "                        [320,370,240,290],\n",
    "                        [320,370,360,410]] \n",
    "\n",
    "def get_range(shape,size=size,base = 500):\n",
    "            x0 = shape[0] * size // base\n",
    "            y0 = shape[2] * size // base\n",
    "            delta = (shape[1]-shape[0])* size // base\n",
    "            x1 = x0+delta\n",
    "            y1 = y0+delta\n",
    "            return x0,x1,y0,y1\n",
    "\n",
    "for i in range(0,10):\n",
    "    x0,x1,y0,y1 = get_range(ten_detector_regions[i])\n",
    "    # print([x0,x1,y0,y1])\n",
    "    detector_plane[x0:x1,y0:y1] = 1\n",
    "\n",
    "# plot the detector region\n",
    "rows, cols = 1 ,1\n",
    "fig = plt.figure(figsize=(7,7))\n",
    "plt.imshow(detector_plane,cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
